// Store 相关

import { createStore } from 'vuex'
// 导入管理员api
import { login, getinfo } from "~/api/manager";
// 引入cookie封装类
import { setToken, removeToken } from "~/composables/auth";


const store = createStore({
    state: {
        // 用户信息
        user: {},
        // 侧边宽度
        asideWidth: "250px",
        // 菜单数组
        menus:[],
        // 权限相关
        ruleNames:[]
    },
    mutations: {
        // 记录用户信息
        SET_USERINFO(state, user) {
            //用户信息状态
            state.user = user
        },
        // 展开/缩起侧边
        handleAsideWidth(state) {
            state.asideWidth = state.asideWidth == "250px" ? "64px" : "250px"
        },
        SET_MENUS(state,menus){
            state.menus = menus
        },
        SET_RULENAMES(state,ruleNames){
            state.ruleNames = ruleNames
        }

    },
    actions: {
        // 用户登录
        login({ commit }, { username, password }) {
            return new Promise((resolve, reject) => {
                login(username, password).then(res => {
                    setToken(res.token)
                    resolve(res)
                }).catch(err => reject(err))
            })
        },

        // 获取当前登录用户信息
        getinfo({ commit }) {
            return new Promise((resolve, reject) => {
                getinfo().then(res => {
                    // 设置用户登录的用信息
                    commit("SET_USERINFO", res)
                    // 设置用户的菜单
                    commit("SET_MENUS", res.menus)
                    // 设置用户的权限相关
                    commit("SET_RULENAMES", res.ruleNames)
                    resolve(res)
                }).catch(err => reject(err))
            })
        },

        // 退出用户登录
        logout({ commit }) {
            // 移除cookie里的token
            removeToken()
            // 清楚当前用户状态 vuex
            commit("SET_USERINFO", {})
        }
    }


})

export default store